/*-------------------------------------------------------------------------
 *
 * 文件和目录权限定义
 *
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/common/file_perm.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef FILE_PERM_H
#define FILE_PERM_H

#include <sys/stat.h>

/*
 * 数据目录权限的模式掩码，仅允许所有者读取/写入目录和文件。
 *
 * 这是默认值。
 */
#define PG_MODE_MASK_OWNER		    (S_IRWXG | S_IRWXO)

/*
 * 数据目录权限的模式掩码，同时允许组读取/执行。
 */
#define PG_MODE_MASK_GROUP			(S_IWGRP | S_IRWXO)

/* 创建目录的默认模式 */
#define PG_DIR_MODE_OWNER			S_IRWXU

/* 创建目录的模式，允许组读取/执行 */
#define PG_DIR_MODE_GROUP			(S_IRWXU | S_IRGRP | S_IXGRP)

/* 创建文件的默认模式 */
#define PG_FILE_MODE_OWNER		    (S_IRUSR | S_IWUSR)

/* 创建文件的模式，允许组读取 */
#define PG_FILE_MODE_GROUP			(S_IRUSR | S_IWUSR | S_IRGRP)

/* 创建数据目录中的目录和文件的模式 */
extern PGDLLIMPORT int pg_dir_create_mode;
extern PGDLLIMPORT int pg_file_create_mode;

/* 传递给 umask() 的模式掩码 */
extern PGDLLIMPORT int pg_mode_mask;

/* 根据提供的模式设置权限和掩码 */
extern void SetDataDirectoryCreatePerm(int dataDirMode);

/* 根据数据目录的模式设置权限和掩码 */
extern bool GetDataDirectoryCreatePerm(const char *dataDir);

#endif							/* FILE_PERM_H */
